<?php
namespace app\usedb\controller;

use app\BaseController;
use think\exception\ValidateException;
use think\facade\Filesystem;
use think\facade\View;


class Upload extends BaseController
{
    public function upload_file()
    {
        if($this->request->isPost()){   // 如果接收到表单post请求
            // 处理文件上传
            // 1.使用请求对象的file方法 得到一个文件上传对象
//            $file = $this->request->file('img');
            // 如果file不传参，则返回的是数组
            $file = $this->request->file();
//            halt($file);
            // 上传验证
            // fileSize 上传文件的最大字节
            // fileExt 文件后缀，多个用逗号分割或者数组
            // fileMime 文件MIME类型，多个用逗号分割或者数组
            // image 验证图像文件的尺寸和类型
            validate(['img' => ['image', 'fileSize' => '10240', 'fileExt' => ['jpg', 'png']]])
                ->check($file);

            // 2.使用 think\facade\Filesystem 类中的putFile 方法 将文件从临时路径移动到正式路径
//            $savename = Filesystem::putFile('photo', $file);
            // 使用disk方法切换config里filesystem设置的磁盘列表来更改存储位置
//            $savename = Filesystem::disk('public')->putFile('photo', $file);
            // 切换至其他自定义地址
//            $savename = Filesystem::disk('storage_test')->putFile('photo', $file);
            // 验证器只能接收file()传的数组，而putFile()只能接收对象，需要按键取值取到数组里面的文件对象
            $savename = Filesystem::disk('storage_test')->putFile('photo', $file['img']);
            dump($savename);
        } else {
            return View::fetch();
        }
    }

    public function ajax_upload(){
        return View::fetch();
    }
    public function ajax_upload2(){
        // 服务器接收请求 数组
        $file = $this->request->file();
        try {
            // 上传信息验证
            validate(['img' => ['image', 'fileSize' => '10240', 'fileExt' => ['jpg', 'png']]])
                ->check($file);
            $savename = Filesystem::disk('temp')->putFile('photo', $file['img']);
            $arr = ['error' => 0, 'msg' => '上传成功', 'path' => $savename];
        } catch (ValidateException $e) {
            $arr = ['error' => 1, 'msg' => $e->getError()];
        } catch (\Exception $e) {
            $arr = ['error' => 2, 'msg' => '系统错误'];
        }
        // tp 自带json函数，可以将数组转换成json格式
        return json($arr);
    }
}